package cn.krund.lyc.hotlerobot.Ros.service.communication;

import android.util.Log;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

/**
 * @包名: cn.krund.lyc.hotlerobot.Ros.service.communication
 * @作者: 刘育成
 * @时间: 2018/4/8  11:15
 * @org: 克路德人工智能
 * @描述: TODO
 * @fileName: SendMessageToClientRunnable
 */

public class SendMessageToClientRunnable implements Runnable {
    private byte[] m_datas;         // 需要发送的数据
    private int     m_dataOffset;   // 有效数据的偏移量
    private int     m_dataSize;     // 有效数据的长度
    private Socket m_socket;

    /**
     * 发送信息到客户端操作类的构造函数
     * @param socket            可操作的套接字实例
     * @param datas             需要发送的数据
     * @param dataOffset        需要发送的数据偏移量
     * @param dataSize          需要发送的数据实际长度
     */
    public SendMessageToClientRunnable(Socket socket, byte[] datas, int dataOffset, int dataSize) {
        this.m_socket=socket;
        this.m_datas = new byte[dataSize];
        System.arraycopy(datas,0,this.m_datas,0,dataSize);
//        this.m_datas=datas;
        this.m_dataOffset=dataOffset;
        this.m_dataSize=dataSize;
    }
    @Override
    public void run() {
        if(this.m_datas==null || this.m_datas.length==0 || this.m_socket==null || !this.m_socket.isConnected()) return;

        try {
            Log.i("--数据发送目标--", "---将XU4原始数据发给客户端---目标IP为：" + this.m_socket.getInetAddress().getHostAddress());
            DataOutputStream printStream = new DataOutputStream(this.m_socket.getOutputStream());// 获取输出流
            printStream.write(this.m_datas,this.m_dataOffset,this.m_dataSize);                                          // 将从xu4获取到的协议数据写到输出流中
            printStream.flush();
            Log.i("--数据发送完成--", "完成向客户端" + this.m_socket.getInetAddress().getHostAddress() + "m_dataSize size:"+m_dataSize);
        } catch (IOException e) {
            e.printStackTrace();
            try {
                this.m_socket.close();
                this.m_socket = null;
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    }
}